package com.allen.study.application.api.assembler.mapper;

import com.allen.study.application.api.request.SysEmpRoleCreateRequest;
import com.allen.study.application.api.request.SysEmpRoleQueryRequest;
import com.allen.study.application.api.request.SysEmpRoleUpdateRequest;
import com.allen.study.application.api.response.SysEmpRoleQueryResponse;
import com.allen.study.application.api.response.SysEmpRoleResponse;
import com.allen.study.domain.entity.SysEmpRole;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * 用户角色关联表数据传输对象结构映射
 *
 * @author AllenSun
 * @since 2025-04-23 20:46
 */
@Mapper
public interface ISysEmpRoleDTOStructMapper {

    /**
     * 用户角色关联表数据传输对象结构映射实例
     */
    ISysEmpRoleDTOStructMapper INSTANCE = Mappers.getMapper(ISysEmpRoleDTOStructMapper.class);

    /**
     * 用户角色关联表创建请求数据传输对象 转 用户角色关联表实体
     *
     * @param createRequest 用户角色关联表创建请求数据传输对象
     * @return 用户角色关联表实体
     */
    SysEmpRole fromCreateRequest(SysEmpRoleCreateRequest createRequest);

    /**
     * 用户角色关联表更新请求数据传输对象 转 用户角色关联表实体
     *
     * @param updateRequest 用户角色关联表更新请求数据传输对象
     * @return 用户角色关联表实体
     */
    SysEmpRole fromUpdateRequest(SysEmpRoleUpdateRequest updateRequest);

    /**
     * 用户角色关联表查询请求数据传输对象 转 用户角色关联表实体
     *
     * @param queryRequest 用户角色关联表查询请求数据传输对象
     * @return 用户角色关联表实体
     */
    SysEmpRole fromQueryRequest(SysEmpRoleQueryRequest queryRequest);

    /**
     * 用户角色关联表实体 转 用户角色关联表响应数据传输对象
     *
     * @param sysEmpRole 用户角色关联表实体
     * @return 用户角色关联表响应数据传输对象
     */
    SysEmpRoleResponse toResponse(SysEmpRole sysEmpRole);

    /**
     * 用户角色关联表实体 转 用户角色关联表查询响应数据传输对象
     *
     * @param sysEmpRole 用户角色关联表实体
     * @return 用户角色关联表查询响应数据传输对象
     */
    SysEmpRoleQueryResponse toQueryResponse(SysEmpRole sysEmpRole);

    /**
     * 用户角色关联表实体列表 转 用户角色关联表查询响应数据传输对象列表
     *
     * @param sysEmpRoleList 用户角色关联表实体列表
     * @return 用户角色关联表查询响应数据传输对象列表
     */
    List<SysEmpRoleQueryResponse> toQueryResponse(List<SysEmpRole> sysEmpRoleList);
}
